/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Model;

import Entity.PublikasiKaryaDosen;
import Entity.User;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import library.Koneksi;

/**
 *
 * @author user
 * model untuk menangani operasi database berkaitan dengan publikasi karya ilmiah dosen
 */
public class DaftarPublikasiKaryaDosen {

    PublikasiKaryaDosen karyaIlmiah;
    
    //method digunakan untuk mengambil daftar publikasi karya dosen berdasarkan pemilik karya, judul, tingkat publikasi, dan periode publikasi karya ilmiah
    public List<PublikasiKaryaDosen> ambilDaftarPublikasiKaryaDosen(String pemilikKarya, String judul, String tingkatPublikasi, String periodeAwal, String periodeAkhir) {

        List<PublikasiKaryaDosen> daftarPublikasiKaryaDosen = new ArrayList<PublikasiKaryaDosen>();
        
        String sql;
        
        if(!pemilikKarya.isEmpty()){
            sql = "SELECT * FROM tingkat_publikasi, publikasi_karya_dosen, dosen_pemilik_karya "
                + "where tingkat_publikasi.ID_TINGKAT_PUBLIKASI = publikasi_karya_dosen.ID_TINGKAT_PUBLIKASI AND "
                    + "publikasi_karya_dosen.NO_PUBLIKASI = dosen_pemilik_karya.NO_PUBLIKASI "
                    + "AND dosen_pemilik_karya.ID_USER = '"+pemilikKarya+"' ";
        } else{
        
        sql = "SELECT * FROM tingkat_publikasi, publikasi_karya_dosen "
                + "where tingkat_publikasi.ID_TINGKAT_PUBLIKASI = publikasi_karya_dosen.ID_TINGKAT_PUBLIKASI ";
        
        }
        if (!judul.isEmpty()) {
            sql = sql + "and publikasi_karya_dosen.JUDUL_KARYA LIKE '%" + judul + "%' ";
        }
        if (!tingkatPublikasi.isEmpty()) {
            sql = sql + "and tingkat_publikasi.ID_TINGKAT_PUBLIKASI = " + tingkatPublikasi + " ";
        }
        if (!periodeAwal.isEmpty()) {
            sql = sql + "and publikasi_karya_dosen.TAHUN_PUB_KARYA BETWEEN '" + periodeAwal + "' AND '" + periodeAkhir + "' ";
        }

        sql = sql + "ORDER BY publikasi_karya_dosen.NO_PUBLIKASI DESC";
        System.out.println(sql);
        PreparedStatement st = null;
        ResultSet rs = null;
        try {

            Connection conn = Koneksi.getKoneksi();

            st = conn.prepareStatement(sql);
            rs = st.executeQuery();

            while (rs.next()) {
                this.karyaIlmiah = new PublikasiKaryaDosen();
                
                if(!pemilikKarya.isEmpty()){
                karyaIlmiah.setUniqueKey(rs.getString("STATUS_PENGUPLOAD"));
                }
                
                User user = new User();
                user.setIdUser(rs.getString("PENGUPLOAD"));
                
                karyaIlmiah.setUserPengupload(user);
                
                karyaIlmiah.setIdTingkatPublikasi(rs.getInt("ID_TINGKAT_PUBLIKASI"));
                karyaIlmiah.setTingkatPublikasi(rs.getString("TINGKAT_PUBLIKASI"));

                karyaIlmiah.setNoPublikasi(rs.getInt("NO_PUBLIKASI"));
                karyaIlmiah.setTahunPubKarya(rs.getString("TAHUN_PUB_KARYA"));
                karyaIlmiah.setJudulKarya(rs.getString("JUDUL_KARYA"));
                karyaIlmiah.setTempatPublikasi(rs.getString("DIPUBLIKASIKAN_PADA"));
                karyaIlmiah.setFileKarya(rs.getString("FILE_KARYA"));
                karyaIlmiah.setUkuranFileKarya(rs.getString("UKURAN_FILE_KARYA"));
                karyaIlmiah.setTanggalUploadFile(rs.getString("TANGGAL_UPLOAD_FILE"));
                karyaIlmiah.setTipeFileKarya(rs.getString("TIPE_FILE_KARYA"));

                daftarPublikasiKaryaDosen.add(karyaIlmiah);
            }
        } catch (SQLException ex) {
            Logger.getLogger(DaftarPublikasiKaryaDosen.class.getName()).log(Level.SEVERE, null, ex);
        } finally {
            try {
                st.close();
            } catch (SQLException ex) {
                Logger.getLogger(DaftarPublikasiKaryaDosen.class.getName()).log(Level.SEVERE, null, ex);
            }
            try {
                rs.close();
            } catch (SQLException ex) {
                Logger.getLogger(DaftarPublikasiKaryaDosen.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
        return daftarPublikasiKaryaDosen;

    }

    //method digunakan untuk mengambil detail publikasi karya ilmiah
    public PublikasiKaryaDosen detailPublikasiKaryaDosen(PublikasiKaryaDosen publikasiKarya) {
        
        String sql;
        
        if (publikasiKarya.getUniqueKey() != "") {
            sql = "SELECT * FROM tingkat_publikasi AS A, publikasi_karya_dosen AS B "
                    + "where A.ID_TINGKAT_PUBLIKASI = B.ID_TINGKAT_PUBLIKASI "
                    + "and B.UNIQUEKEY='" + publikasiKarya.getUniqueKey()+"'";
        } else {
            sql = "SELECT * FROM tingkat_publikasi AS A, publikasi_karya_dosen AS B "
                    + "where A.ID_TINGKAT_PUBLIKASI = B.ID_TINGKAT_PUBLIKASI "
                    + "and B.NO_PUBLIKASI=" + publikasiKarya.getNoPublikasi();
        }
        System.out.println(sql);
        PreparedStatement st = null;
        ResultSet rs = null;
        try {

            Connection conn = Koneksi.getKoneksi();

            st = conn.prepareStatement(sql);
            rs = st.executeQuery();

            while (rs.next()) {
                this.karyaIlmiah = new PublikasiKaryaDosen();
                
                User user = new User();
                user.setIdUser(rs.getString("PENGUPLOAD"));
                
                karyaIlmiah.setUserPengupload(user);
                
                karyaIlmiah.setIdTingkatPublikasi(rs.getInt("ID_TINGKAT_PUBLIKASI"));
                karyaIlmiah.setTingkatPublikasi(rs.getString("TINGKAT_PUBLIKASI"));

                karyaIlmiah.setNoPublikasi(rs.getInt("NO_PUBLIKASI"));
                karyaIlmiah.setTahunPubKarya(rs.getString("TAHUN_PUB_KARYA"));
                karyaIlmiah.setJudulKarya(rs.getString("JUDUL_KARYA"));
                karyaIlmiah.setTempatPublikasi(rs.getString("DIPUBLIKASIKAN_PADA"));
                karyaIlmiah.setFileKarya(rs.getString("FILE_KARYA"));
                karyaIlmiah.setUkuranFileKarya(rs.getString("UKURAN_FILE_KARYA"));
                karyaIlmiah.setTanggalUploadFile(rs.getString("TANGGAL_UPLOAD_FILE"));
                karyaIlmiah.setTipeFileKarya(rs.getString("TIPE_FILE_KARYA"));
            }
        } catch (SQLException ex) {
            Logger.getLogger(DaftarPublikasiKaryaDosen.class.getName()).log(Level.SEVERE, null, ex);
        } finally {
            try {
                st.close();
            } catch (SQLException ex) {
                Logger.getLogger(DaftarPublikasiKaryaDosen.class.getName()).log(Level.SEVERE, null, ex);
            }
            try {
                rs.close();
            } catch (SQLException ex) {
                Logger.getLogger(DaftarPublikasiKaryaDosen.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
        return karyaIlmiah;

    }

    //method digunakan untuk menghapus data publikasi karya ilmiah
    public boolean hapusPublikasiKaryaDosen(PublikasiKaryaDosen karyaIlmiah) {

        boolean hasil = true;

        PreparedStatement st = null;

        String sql = "DELETE FROM publikasi_karya_dosen WHERE NO_PUBLIKASI = " + karyaIlmiah.getNoPublikasi();

        Connection conn = Koneksi.getKoneksi();
        try {
            st = conn.prepareStatement(sql);
            int rs = st.executeUpdate();
            if (rs > 0) {
                hasil = true;
            } else {
                hasil = false;
            }
        } catch (SQLException ex) {
            Logger.getLogger(DaftarPublikasiKaryaDosen.class.getName()).log(Level.SEVERE, null, ex);
        } finally {
            try {
                st.close();
            } catch (SQLException ex) {
                Logger.getLogger(DaftarPublikasiKaryaDosen.class.getName()).log(Level.SEVERE, null, ex);
            }
        }

        return hasil;

    }

    //method digunakan untuk menambah publikasi karya ilmiah
    public boolean tambahPublikasiPublikasiKaryaDosen(PublikasiKaryaDosen karyaIlmiah) {

        boolean hasil = false;
        this.karyaIlmiah = karyaIlmiah;

        String sql = "insert into publikasi_karya_dosen(ID_TINGKAT_PUBLIKASI, TAHUN_PUB_KARYA, JUDUL_KARYA, "
                + "DIPUBLIKASIKAN_PADA, FILE_KARYA, UKURAN_FILE_KARYA, TANGGAL_UPLOAD_FILE, "
                + "TIPE_FILE_KARYA, PENGUPLOAD, UNIQUEKEY) "
                + "value (" + this.karyaIlmiah.getIdTingkatPublikasi()
                + ",'" + this.karyaIlmiah.getTahunPubKarya()
                + "','" + this.karyaIlmiah.getJudulKarya()
                + "','" + this.karyaIlmiah.getTempatPublikasi()
                + "','" + this.karyaIlmiah.getFileKarya()
                + "','" + this.karyaIlmiah.getUkuranFileKarya()
                + "','" + this.karyaIlmiah.getTanggalUploadFile()
                + "','" + this.karyaIlmiah.getTipeFileKarya()
                + "','" + this.karyaIlmiah.getUserPengupload().getIdUser()
                + "','" + this.karyaIlmiah.getUniqueKey()+"')";
        System.out.println(sql);
        PreparedStatement st = null;
        try {
            Connection conn = Koneksi.getKoneksi();
            st = conn.prepareStatement(sql);
            int rs = st.executeUpdate(sql);
            if (rs > 0) {
                hasil = true;
            } else {
                return false;
            }
        } catch (SQLException ex) {
            Logger.getLogger(DaftarPublikasiKaryaDosen.class.getName()).log(Level.SEVERE, null, ex);
        } finally {
            try {
                st.close();
            } catch (SQLException ex) {
                Logger.getLogger(DaftarPublikasiKaryaDosen.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
        return hasil;

    }

    //method digunakan untuk mengubah publikasi karya ilmiah
    public boolean ubahPublikasiPublikasiKaryaDosen(PublikasiKaryaDosen karyaIlmiah) {

        boolean hasil = false;
        this.karyaIlmiah = karyaIlmiah;

        String sql = "update publikasi_karya_dosen SET "
                + "ID_TINGKAT_PUBLIKASI = " + this.karyaIlmiah.getIdTingkatPublikasi()
                + ", TAHUN_PUB_KARYA = '" + this.karyaIlmiah.getTahunPubKarya()
                + "', JUDUL_KARYA = '" + this.karyaIlmiah.getJudulKarya()
                + "', DIPUBLIKASIKAN_PADA = '" + this.karyaIlmiah.getTempatPublikasi()
                + "', FILE_KARYA = '" + this.karyaIlmiah.getFileKarya()
                + "', UKURAN_FILE_KARYA = '" + this.karyaIlmiah.getUkuranFileKarya()
                + "', TANGGAL_UPLOAD_FILE = '" + this.karyaIlmiah.getTanggalUploadFile()
                + "', TIPE_FILE_KARYA = '" + this.karyaIlmiah.getTipeFileKarya()
                + "', PENGUPLOAD = '" + this.karyaIlmiah.getUserPengupload().getIdUser()
                + "' where NO_PUBLIKASI = " + this.karyaIlmiah.getNoPublikasi();
        System.out.println(sql);
        PreparedStatement st = null;

        try {
            Connection conn = Koneksi.getKoneksi();
            st = conn.prepareStatement(sql);
            int rs = st.executeUpdate(sql);
            if (rs > 0) {
                hasil = true;
            } else {
                hasil = false;
            }
        } catch (SQLException ex) {
            Logger.getLogger(DaftarPublikasiKaryaDosen.class.getName()).log(Level.SEVERE, null, ex);
            System.out.println(ex);
        } finally {
            try {
                st.close();
            } catch (SQLException ex) {
                Logger.getLogger(DaftarPublikasiKaryaDosen.class.getName()).log(Level.SEVERE, null, ex);
            }
        }

        return hasil;

    }
}
